import CompoundPath = require('./../../common/graph/CompoundPath');
import GCJ_CLASS_TYPE = require('./../../common/GCJ_CLASS_TYPE');
import DEFINE = require('./../../common/DEFINE');
import ObjBase = require('./ObjBase');
import PageInfo=require('./../../common/PageInfo');
import FColor=require('./../color/FColor');
import ImageObj=require('./ImageObj');

var path=require('path');
var CommonUtil=require('../../../../common/util/CommonUtil');
var async  = require( 'async'); // 同步控制
var fs = require('fs')
var CONFIG=require('../../../../common/config');

export  = GraphObj;

/**
 *
 * @author 
 *
 */
class GraphObj extends ObjBase{
    public static GRAPHOBJ_GRAPH_TYPE   = 0;
    
    public static GRAPHOBJ_AUTO_REPLACE_OFF = 0;
    public static GRAPHOBJ_AUTO_REPLACE_ON  = 1;
    
    public cp = new CompoundPath();                                 // 图形轮廓
    public gt: number=GraphObj.GRAPHOBJ_GRAPH_TYPE;                 // 见数据库的graph_type
    public ar: number=GraphObj.GRAPHOBJ_AUTO_REPLACE_OFF;           // auto_replace 1表示排版时使用自动替换功能
    
    public constructor(g?) {
        super(g);
        
        this.ct=GCJ_CLASS_TYPE.CLASS_TYPE_GraphObj;
//        this.color = new FColor();// 初始化fill颜色
	}
    // 最小化TextExt转换成Json:所有页root对象只保留TextExtObj(且只保留fz\te\style\color\id\pos几个属性)
    public toJsonOfMinTextExt():string{
        return this.toJson();
    }
    // 转成json字符串
    public toJson ():string {
        
        var superJson = super.toJson();
        superJson = superJson.substr(1, superJson.length - 2);
        
        var ret = '{';
        ret += superJson;
       
        
        if(this.cp){
            ret += ',';
            ret += ('"cp":' + this.cp.toJson());
        }
        
        ret+=',';
        ret+=('"gt":'+this.gt);
        
        ret+=',';
        ret+=('"ar":'+this.ar);
        
        ret += '}';
        return ret;
    }
    // 从json对象(注意不是json字符串)中解析
    // 参数：self,true表示只拷贝自身数据，而不拷贝子的数据
    public fromJson(jsonObj,versionId,self?) {
        super.fromJson(jsonObj,versionId,self);
        super.fromJson(jsonObj, versionId,self);
        
        if(jsonObj.hasOwnProperty("cp"))
        {
            this.cp.fromJson(jsonObj.cp, versionId);
        }
        
        if(jsonObj.hasOwnProperty("gt")) {
            this.gt = jsonObj.gt;
        }
        
        if(jsonObj.hasOwnProperty("ar")) {
            this.ar=jsonObj.ar;
        }
        
        // 加载文档时
        if (this.getGlobalData().docStatus() == DEFINE.DOC_STATUS_LOADING) {
            this.getGlobalData().objManager().saveObject(this);
        }
    }
    
    // 获取对象名称
    public getObjetName(): string {
        var ret = "图形";
        if(this.ar == GraphObj.GRAPHOBJ_AUTO_REPLACE_ON) {
            ret += " [可自动替换]"
        }
        return ret;
    }
   
    // 扩展大小
    // 参数：controlType 控制点类型
    // 参数：ratioX x缩放比例
    // 参数：ratioY y缩放比例
    // 参数：outside true表示操作所在的最外层对象，false表示内部对象
    public expand(controlType: number,ratioX: number,ratioY: number,outside: boolean) {
        super.expand(controlType,ratioX,ratioY,outside);

        if(this.constrain.scale==1) {
            this.cp.adjustPosition(ratioX,ratioY,2);    
        }        
    }
    
    // 缩放对象
    public scale(s: number) {
        super.scale(s);
        this.cp.adjustPosition(s,s,2);
    }
    
    // 深度更新id［处理自身和子对象，递归］
    // 参数：idMaps，新旧id的对应关系, 例如：[{oldId:1,newId:2}]
    public deepResetId(idMaps: Array<any>) {
        super.deepResetId(idMaps);

    }
//SJG_MARK_APPEND--------------------


}//SJG_MARK_END-------------------------